package com.cy.ppj.service.user;

import com.cy.ppj.model.PageBean;
import com.cy.ppj.model.Result;
import com.cy.ppj.model.domian.user.User;
import com.cy.ppj.model.dto.user.UserAddDTO;
import com.cy.ppj.model.dto.user.UserImprotDTO;
import com.cy.ppj.model.enums.UserStatus;
import com.cy.ppj.model.query.ChannelUserByCompanyAdminQuery;
import com.cy.ppj.model.query.ChannelUserBySalesAdminQuery;
import com.cy.ppj.model.query.ChannelUserBySalesQuery;
import com.cy.ppj.model.query.UserAdminQuery;
import com.cy.ppj.model.vo.ChannelUserAdminVO;
import com.cy.ppj.model.vo.ChannelUserByCompanyAdminVO;
import com.cy.ppj.model.vo.ChannelUserBySalesAdminVO;
import com.cy.ppj.model.vo.ChannelUserBySalesVO;
import com.cy.ppj.model.vo.SalesUserAdminVO;
import com.cy.ppj.model.vo.UserDetailAdminVO;
import com.cy.ppj.model.vo.front.account.AccountIndexVO;

import java.util.List;

public interface UserService {

    /**
     * 用户注册
     *
     * @param userAddDTO
     */
    void insertUser(UserAddDTO userAddDTO);

    /**
     * 批量导入用户
     *
     * @param userImprotDTOList
     */
    void insertUsers(List<UserImprotDTO> userImprotDTOList);

    /**
     * 用户登录
     *
     * @param mobile
     * @param password
     * @return
     */
    Result login(String mobile, String password);

    /**
     * 微信自动登录
     *
     * @param openId
     * @return
     */
    Result loginByWecaht(String openId);

    /**
     * 绑定业务员
     *
     * @param mobile
     * @param userId
     * @return
     */
    Result bindSalesman(String mobile, Long userId);

    /**
     * 后台-渠道员（经纪人）列表
     *
     * @param userAdminQuery
     * @return
     */
    PageBean<ChannelUserAdminVO> queryChannelUserList(UserAdminQuery userAdminQuery);

    /**
     * 后台查询用户信息详情
     *
     * @param userId
     * @return
     */
    UserDetailAdminVO queryUserDetailAdmin(Long userId);

    /**
     * 后台-业务员列表
     *
     * @param userAdminQuery
     * @return
     */
    PageBean<SalesUserAdminVO> querySalesUserList(UserAdminQuery userAdminQuery);

    /**
     * 后台-通过业务员查询下属发展的渠道员列表
     *
     * @param channelUserBySalesAdminQuery
     * @return
     */
    PageBean<ChannelUserBySalesAdminVO> queryChannelUserBySalesAdmin(ChannelUserBySalesAdminQuery channelUserBySalesAdminQuery);

    /**
     * 前台-通过业务员查询下属发展的渠道员列表
     *
     * @param channelUserBySalesQuery
     * @return
     */
    PageBean<ChannelUserBySalesVO> queryChannelUserBySales(ChannelUserBySalesQuery channelUserBySalesQuery);

    /**
     * 更改用户状态
     *
     * @param userId
     * @param status
     * @return
     */
    Result updateUserStatus(Long userId, UserStatus status);

    /**
     * 修改密码
     *
     * @param oldPassword
     * @param newPassword
     * @return
     */
    void updatePassword(Long userId, String oldPassword, String newPassword);

    /**
     * 重置密码
     *
     * @param mobile
     * @param newPassword
     */
    void resetPassword(String mobile, String newPassword);

    /**
     * 后台-根据渠道公司查询渠道业务员列表
     *
     * @param query
     * @return
     */
    PageBean<ChannelUserByCompanyAdminVO> queryChannelUserByCompanyAdmin(ChannelUserByCompanyAdminQuery query);

    /**
     * 解绑银行卡信息
     *
     * @param userId
     */
    void unBindBank(Long userId);

    /**
     * 查询用户
     *
     * @param user
     * @return
     */
    User selectUser(User user);

    /**
     * 账户中心用户首页数据
     *
     * @param userId
     * @return
     */
    AccountIndexVO queryAccountIndexInfo(Long userId);
    
    /**
     * 更新user信息
     * 
     * @param user
     */
    void updateUser(User user);
}
